﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;
using Portfolio.Entities;
using Portfolio.Repository.Common;
using Portfolio.Repository.Interfaces;

namespace Portfolio.Repository.ArticleCategories
{
    /// <summary>
    /// Klasa repozytirum Kategorie Artykułów DropDownList
    /// </summary>
    public class ArticleCategoriesDDLRepository : GenericRepository
    {
        /// <summary>
        /// Konstruktor dziedziczy z klasy Generycznej (ogólnej) Repozytorium, domyślny context=Portfolio3Entities
        /// </summary>
        /// <param name="context"></param>
        public ArticleCategoriesDDLRepository() : base() { }

        /// <summary>
        /// Konstruktor dziedziczy z klasy Generycznej (ogólnej) Repozytorium
        /// </summary>
        /// <param name="context"></param>
        public ArticleCategoriesDDLRepository(ObjectContext context) : base(context) { }

        /// <summary>
        /// Metoda użytkownika
        /// Pobiera z bazy danych nadrzędne Kategorie        
        /// WYkorzystane na formuarzu modyfikacji kategorii
        /// Widok:  (DepthLevel = 0) AND (ActiveFlag = 1 true)
        /// </summary>
        /// <param name="articleCategoryID">Id kategorii, które się nie wyświetla</param>
        /// <returns>Lista kategorii (widok)</returns>
        public List<ArticleCategoriesDDLFormV> GetArticleCategoriesDDLFormByNotArticleCategoryID(int pArticleCategoryID)
        {
            return Find<ArticleCategoriesDDLFormV>(a => a.ArticleCategoryID != pArticleCategoryID).OrderBy(b => b.SeqAllCategory).ToList();
        }

        /// <summary>
        /// Metoda użytkownika
        /// Pobiera z bazy danych nadrzędne Kategorie        
        /// WYkorzystane na formuarzu dodawanie kategorii
        /// Widok:  (DepthLevel = 0) AND (ActiveFlag = 1 true)
        /// </summary>        
        /// <returns>Lista kategorii (widok)</returns>
        public List<ArticleCategoriesDDLFormV> GetArticleCategoriesDDLForm()
        {
            return GetAll<ArticleCategoriesDDLFormV>().OrderBy(b => b.SeqAllCategory).ToList();
        }

        /// <summary>
        /// Metoda użytkownika
        /// Pobiera z bazy danych wykorzystane nadrzędne Kategorie
        /// W widoku ustawione depthlevel=0
        /// Wykorzystane na gridzie do wyszukiwania
        /// </summary>        
        /// <returns>Lista kategorii (widok)</returns>
        public List<ArticleCategoriesDDLSearchV> GetArticleCategoriesDDLSearch()
        {            
            return GetAll<ArticleCategoriesDDLSearchV>().OrderBy(b => b.SeqAllCategory).ToList();
        }
    }
}
